#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
B站视频下载器主程序
程序入口点，初始化pygame并启动主窗口

作者: 开发者
版本: 1.0.0
创建时间: 2024年
"""

import sys
import os
import pygame
import traceback
from pathlib import Path

# 添加项目根目录到Python路径
project_root = Path(__file__).parent
sys.path.insert(0, str(project_root))

# 导入配置和模块
try:
    from config import (
        WINDOW_WIDTH, WINDOW_HEIGHT, WINDOW_TITLE, 
        FPS, DEBUG
    )
    from gui.styles.fonts import init_fonts
    from gui.styles.colors import get_theme_color, THEMES, CURRENT_THEME
    from gui.main_window import MainWindow
except ImportError as e:
    print(f"导入模块失败: {e}")
    print("请确保所有必要的文件都已创建")
    sys.exit(1)

class BilibiliDownloaderApp:
    """
    B站视频下载器主应用类
    负责初始化pygame、管理主窗口和事件循环
    """
    
    def __init__(self):
        """
        初始化应用
        """
        self.screen = None
        self.clock = None
        self.running = False
        self.main_window = None
        
        # 初始化pygame
        self._init_pygame()
        
        # 初始化字体系统
        init_fonts()
        
        print(f"应用初始化完成: {WINDOW_TITLE}")
    
    def _init_pygame(self):
        """
        初始化pygame系统
        """
        try:
            # 初始化pygame
            pygame.init()
            
            # 创建窗口
            self.screen = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
            pygame.display.set_caption(WINDOW_TITLE)
            
            # 设置窗口图标（如果有的话）
            # icon = pygame.image.load("icon.png")
            # pygame.display.set_icon(icon)
            
            # 创建时钟对象
            self.clock = pygame.time.Clock()
            
            print(f"Pygame初始化成功")
            print(f"窗口尺寸: {WINDOW_WIDTH}x{WINDOW_HEIGHT}")
            print(f"窗口标题: {WINDOW_TITLE}")
            
        except Exception as e:
            print(f"Pygame初始化失败: {e}")
            sys.exit(1)
    
    def _init_main_window(self):
        """
        初始化主窗口
        注意: 这里暂时创建一个简单的窗口，后续会替换为完整的主窗口类
        """
        # TODO: 替换为真正的MainWindow类
        # from gui.main_window import MainWindow
        # self.main_window = MainWindow(self.screen)
        pass
    
    def handle_events(self):
        """
        处理pygame事件
        
        Returns:
            bool: 是否继续运行
        """
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                return False
            
            elif event.type == pygame.KEYDOWN:
                # 处理键盘事件
                if event.key == pygame.K_ESCAPE:
                    return False
                elif event.key == pygame.K_F11:
                    # 切换全屏（暂时不实现）
                    pass
            
            elif event.type == pygame.MOUSEBUTTONDOWN:
                # 处理鼠标点击事件
                if DEBUG:
                    print(f"鼠标点击: {event.pos}")
            
            elif event.type == pygame.MOUSEMOTION:
                # 处理鼠标移动事件（暂时不处理）
                pass
            
            # TODO: 将事件传递给主窗口处理
            # if self.main_window:
            #     self.main_window.handle_event(event)
        
        return True
    
    def update(self):
        """
        更新应用状态
        """
        # TODO: 更新主窗口
        # if self.main_window:
        #     self.main_window.update()
        pass
    
    def draw(self):
        """
        绘制应用界面
        """
        # 清空屏幕
        bg_color = get_theme_color('background')
        self.screen.fill(bg_color)
        
        # TODO: 绘制主窗口
        # if self.main_window:
        #     self.main_window.draw()
        
        # 临时显示欢迎信息
        self._draw_welcome_screen()
        
        # 更新显示
        pygame.display.flip()
    
    def _draw_welcome_screen(self):
        """
        绘制临时的欢迎屏幕
        """
        try:
            # 创建字体
            font_large = pygame.font.SysFont("Microsoft YaHei", 32, bold=True)
            font_medium = pygame.font.SysFont("Microsoft YaHei", 18)
            font_small = pygame.font.SysFont("Microsoft YaHei", 14)
            
            # 渲染文本
            title_text = font_large.render("B站视频下载器", True, (51, 51, 51))
            version_text = font_medium.render("版本 1.0.0", True, (102, 102, 102))
            status_text = font_small.render("正在开发中...", True, (153, 153, 153))
            instruction_text = font_small.render("按 ESC 键退出", True, (153, 153, 153))
            
            # 计算居中位置
            screen_center_x = WINDOW_WIDTH // 2
            screen_center_y = WINDOW_HEIGHT // 2
            
            # 绘制文本
            title_rect = title_text.get_rect(center=(screen_center_x, screen_center_y - 60))
            version_rect = version_text.get_rect(center=(screen_center_x, screen_center_y - 20))
            status_rect = status_text.get_rect(center=(screen_center_x, screen_center_y + 20))
            instruction_rect = instruction_text.get_rect(center=(screen_center_x, screen_center_y + 60))
            
            self.screen.blit(title_text, title_rect)
            self.screen.blit(version_text, version_rect)
            self.screen.blit(status_text, status_rect)
            self.screen.blit(instruction_text, instruction_rect)
            
        except Exception as e:
            if DEBUG:
                print(f"绘制欢迎屏幕时出错: {e}")
    
    def run(self):
        """
        运行主循环
        """
        print("启动应用主循环...")
        self.running = True
        
        try:
            while self.running:
                # 处理事件
                if not self.handle_events():
                    self.running = False
                    break
                
                # 更新状态
                self.update()
                
                # 绘制界面
                self.draw()
                
                # 控制帧率
                self.clock.tick(FPS)
                
        except KeyboardInterrupt:
            print("\n用户中断程序")
        except Exception as e:
            print(f"运行时错误: {e}")
            if DEBUG:
                traceback.print_exc()
        finally:
            self.quit()
    
    def quit(self):
        """
        退出应用
        """
        print("正在退出应用...")
        
        # 清理资源
        if self.main_window:
            # TODO: 清理主窗口资源
            pass
        
        # 退出pygame
        pygame.quit()
        print("应用已退出")

def main():
    """
    主函数
    """
    print("B站视频下载器启动中...")
    print(f"版本: v1.0")
    print(f"窗口标题: {WINDOW_TITLE}")
    
    try:
        # 创建并运行主窗口
        window = MainWindow()
        print("主窗口创建成功")
        print("应用初始化完成")
        print("主循环启动")
        
        window.run()
        
    except Exception as e:
        print(f"程序运行出错: {e}")
        import traceback
        traceback.print_exc()
    finally:
        # 确保Pygame正确退出
        pygame.quit()

if __name__ == "__main__":
    # 设置工作目录为脚本所在目录
    os.chdir(project_root)
    
    # 运行主程序
    main()